An instruction for processing in a computer is typically made up of various constituent parts including, for example, an operation and operands. These constituent parts may be encoded into fields of the instruction, each field comprising one or more binary digit or bit. The number of binary encodings that can be represented by a field of N bits is 2N. For example, a 3-bit field for representing a register operand may be used to represent one of eight registers. An 8-bit field for representing an immediate operand may be used to represent one of two hundred and fifty-six numerical values.
Operands in memory may be addressed by a variety of referencing techniques, often called addressing modes. Typical addressing modes include: direct addressing, register-indirect addressing, and register-relative addressing. Direct addressing is fast but requires the instruction to completely specify a memory address.
Modern computer systems more commonly use some form of register indirection in combination with operating system techniques such as paging or segmentation to provide flexible user access to a virtual address space and efficient system management of physical memory resources. These other addressing modes typically require a processor to dynamically compute virtual addresses in order to access memory operands.
For some processors, for example complex instruction set computer (CISC) processors, instructions are translated or converted into simpler instructions, often called micro-operations. These micro-operations may be more efficiently executed by highly pipelined or parallel hardware. For example, an instruction having a memory operand may be translated into a first micro-operation for computing an address, a second micro-operation for accessing data at the computed address, and a third micro-operation for performing the function associated with the instruction on the data retrieved from memory.
As software becomes more complex and processors execute more instructions in shorter periods of time, larger addressable memory spaces for data and instructions are required. These larger addressable spaces require larger addresses, which take longer for micro-operations to compute and require more space to store and transmit the addresses from micro-operation to micro-operation. To further complicate matters, modern processors no longer work on just a few instructions concurrently, but instead store and process thousands of micro-operations at a time, requiring substantially more storage space to provide for these larger addresses.